/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ia;

import java.awt.Color;
import java.util.HashMap;

/**
 *
 * @author bruno.marinho
 */
public class Util {

    public static boolean reinicia;
    public static int livre=0;
    public static int alimentacao=0;
    public static int movimentacao=0;
    public static int nada=0;
    public static int reproduz=0;
    public static boolean reproducao;
    public static HashMap<ObjCordenada,Integer> lista=new HashMap<ObjCordenada,Integer>();






    public static int geraEspecie() {
        return (int) (1 + (Math.random() * 9));
    }

    public static double geraSaude() {
        return 10.0;
    }

    public static double geraDano() {
        return 1 ; //((double) (1 + (Math.random() * 5))) / 100;
    }


    public static int geraMovimento() {
        int numero = (int) (1 + (Math.random() * 3));
        if (numero == 2) {
            numero = -1;
        }
        if (numero == 3) {
            numero = 0;
        }
        return numero;
    }

    public static Color geraCor(int especie) {
        switch (especie) {
            case 0:
                return new Color(240, 240, 240);
            case 1:
                return Color.BLUE;
            case 2:
                return Color.CYAN;
            case 3:
                return Color.WHITE;
            case 4:
                return Color.YELLOW;
            case 5:
                return Color.GREEN;
            case 6:
                return Color.RED;
            case 7:
                return Color.MAGENTA;
            case 8:
                return Color.ORANGE;
            case 9:
                return Color.PINK;

        }


        return null;
    }

    public static int valida(int linha) {


        if (linha < 0) {
            linha = 9;
        }

        if (linha > 9) {
            linha = 0;
        }
        return linha;
    }

    public static void printaMapa(Elemento[][] mapa) {
        System.out.println(" ");
        for (int i = 0; i < mapa.length; i++) {

            for (int j = 0; j < mapa[i].length; j++) {


                System.out.print(mapa[i][j].getIdentifica());

                if (j == mapa[0].length - 1) {
                    System.out.println("");
                }
            }
        }
        System.out.println(" ");
    }

    public static double geraEvolucao(){
    return 0.5;//((double)( 1 + (Math.random() * 35)))/100;
    }

    public static void verificaVizinhança(int linha, int coluna, Elemento[][] mapa, Elemento especie) {





        int norteLinha = valida(linha - 1);
        int norteColuna = coluna;

        int sulLinha = valida(linha + 1);
        int sulColuna = coluna;

        int lesteLinha = linha;
        int lesteColuna = valida(linha + 1);

        int oesteLinha = linha;
        int oesteColuna = valida(linha - 1);

        int nordesteLinha = valida(linha - 1);
        int nordesteColuna = valida(linha + 1);

        int noroesteLinha = valida(linha - 1);
        int noroesteColuna = valida(linha - 1);

        int suldesteLinha = valida(linha + 1);
        int suldesteColuna = valida(linha + 1);

        int sudoesteLinha = valida(linha + 1);
        int sudoesteColuna = valida(linha - 1);

        Elemento norte = mapa[norteLinha][norteColuna];
        Elemento sul = mapa[sulLinha][sulColuna];
        Elemento leste = mapa[lesteLinha][lesteColuna];
        Elemento oeste = mapa[oesteLinha][oesteColuna];

        Elemento nordeste = mapa[nordesteLinha][nordesteColuna];
        Elemento suldeste = mapa[suldesteLinha][suldesteColuna];
        Elemento noroeste = mapa[noroesteLinha][noroesteColuna];
        Elemento sudoeste = mapa[sudoesteLinha][sudoesteColuna];

        switch (geraChange(especie.getEspecie())) {
            case 0: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                    filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

                if (oeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[oesteLinha][oesteColuna] = filho;
                      Util.livre--;
                }

                if (nordeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[nordesteLinha][nordesteColuna] = filho;
                      Util.livre--;
                }

                if (suldeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[suldesteLinha][suldesteColuna] = filho;
                      Util.livre--;
                }

                if (noroeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[noroesteLinha][noroesteColuna] = filho;
                      Util.livre--;
                }

                if (sudoeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sudoesteLinha][sudoesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 1: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

                if (oeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[oesteLinha][oesteColuna] = filho;
                      Util.livre--;
                }

                if (nordeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[nordesteLinha][nordesteColuna] = filho;
                      Util.livre--;
                }

                if (suldeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[suldesteLinha][suldesteColuna] = filho;
                      Util.livre--;
                }

                if (noroeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[noroesteLinha][noroesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 2: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

                if (oeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[oesteLinha][oesteColuna] = filho;
                      Util.livre--;
                }

                if (nordeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[nordesteLinha][nordesteColuna] = filho;
                      Util.livre--;
                }

                if (suldeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[suldesteLinha][suldesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 3: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

                if (oeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[oesteLinha][oesteColuna] = filho;
                      Util.livre--;
                }

                if (nordeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[nordesteLinha][nordesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 4: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

                if (oeste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[oesteLinha][oesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 5: {

                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }

                if (leste.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[lesteLinha][lesteColuna] = filho;
                      Util.livre--;
                }

            }
            break;
            case 6: {
                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


                if (sul.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[sulLinha][sulColuna] = filho;
                      Util.livre--;
                }
            }
            break;
            case 7: {
                if (norte.getEspecie() == 0) {
                    Elemento filho = new Elemento(especie.getEspecie(), 10);
                     filho.setEvoucao(especie.getEspecie()+geraEvolucao());
                    mapa[norteLinha][norteColuna] = filho;
                      Util.livre--;
                }


            }
            break;
        


        }

        


    }

    private static int geraChange(int especie) {
        switch (especie) {
            case 0: {
                return 0;
            }
            case 1: {
                return 1;
            }
            case 2: {
                return 2;
            }
            case 3: {
                return 3;
            }
            case 4: {
                return 4;
            }
            case 5: {
                return 5;
            }
            case 6: {
                return 6;
            }
            case 7: {
                return 7;
            }
            case 8: {
                return 7;
            }
            case 9: {
                return 7;
            }
           
        }

        return 0;
    }
}
